package com.trade.module.base.service;

import com.trade.module.base.entity.Resource;
import com.trade.common.utils.PageBean;
import com.trade.module.base.vo.ResourceVo;

import java.util.List;

/**
 * Class Description: 资源服务层接口
 *
 * @Version v1.0 2017/4/22 18:11
 * @JDK version 1.8.0_51
 * @Author zfb
 */
public interface ResourceService {
    /**
     * 查询所有的资源信息
     * @return List<Resource> 資源集合
     */
    List<Resource> findResourceAll();

    /**
     * 根据用户ID、ip地址查询用户可访问的菜单
     *
     * @param userId 用戶id
     * @param ip ip地址
     * @return List<Resource> 資源集合
     */
    @Deprecated
    List<Resource> reslistForClient(String userId, String ip);

    /**
     * Method description：添加菜单信息
     *
     * @param resource 资源对象
     * @return Resource
     */
    Resource save(Resource resource);


    /**
     * Method description：添加菜单信息
     * Version:V1.0
     * Author:lwl
     * Date:2016.05.06 at 05:44:51 CST
     *
     * @param resource
     */
    Resource saveSub(Resource resource);
    /**
     * Method description：根据子节点ID查找资源集合
     * Version:V1.0
     * Author:lwl
     * Date:2016.05.06 at 05:44:51 CST
     *
     * @param subId
     */
    List<Resource> findSubRes(String subId);
    /**
     * Method description：修改菜单资源
     * Version:V1.0
     * Author:lwl
     * Date:2016.03.22 at 05:44:51 CST
     *
     * @param resource
     */
    boolean update(Resource resource);

    /**
     * Method description：根据ID查询菜单资源
     * Version:V1.0
     * Author:lwl
     * Date:2016.03.22 at 05:44:51 CST
     *
     * @param id
     */
    ResourceVo findById(String id);
    /**
     * Method description：根据Id修改资源状态（启用）
     * Version:V1.0
     * Author:lwl
     * Date:2016.03.22 at 05:44:51 CST
     *
     * @param id
     */
    ResourceVo startFlagById(String id);
    /**
     * Method description：根据Id修改资源状态（禁止）
     * Version:V1.0
     * Author:lba
     * Date:2016.04.11 at 05:44:51 CST
     *
     * @param id
     */
    ResourceVo banFlagById(String id);

    /**
     * Method description：自动生成菜单编码
     * Version:V1.0
     * Author:lwl
     * Date:2016.04.06 at 05:44:51 CST
     *
     * @param resource
     */
    Boolean getResourceCode(Resource resource);

    /**
     * Method description：根据ID删除菜单资源
     * Version:V1.0
     * Author:lwl
     * Date:2016.03.22 at 05:44:51 CST
     *
     * @param id
     */
    int deleteById(String id);

    /**
     * Method description：根据条件分页查询数据字典
     *
     * @param pageNum           当前页码，为null或者为0将查询所有有效数据
     * @param pageSize           每页查询条数，默认为10
     * @param sortJsonArray      排序的json数组，格式为[{property:"排序字段名",direction:"ASC/DESC"}]，null、空字符串及[]将被认为是不进行排序
     * @param conditionJsonArray 查询条件的json数组，格式为[{property:"字段名",option:"操作类型",value:"值",propertytype:"数据类型"}]
     *                           其中option的值有EQ(等于), IN(在值数组中), ISNULL(非空), LIKE(包含), GT(大于), LT(小于), GTE(大于等于),
     *                           LTE(小于等于), NE(不等于),LIKEIGNORE(包含，忽略大小写)
     *                           propertytype为DATETIME或DATE，DATETIME值格式为YYYY-MM-dd HH:mm:ss，DATE值格式为YYYY-MM-dd
     *                           <p/>
     *                           conditionJsonArray为null、空字符串及[]将被认为是不进行条件过滤
     * @return PageBean
     */
    PageBean<ResourceVo> findResourcePageByCondition(Integer pageNum, Integer pageSize, String sortJsonArray, String conditionJsonArray);

    /**
     * Method description：根据角色id查询角色的资源（没有url的资源将被过滤掉）
     *
     * @param roleId 角色id
     * @return
     */
    List<String> findResourceUrlByRoleId(String roleId);


    List<Resource> findResByRoleId(String roleId, String resFlag);

    /**
     * Method description：根据用户id及url查询用户可访问的按钮信息
     * Version:V1.0
     * Author:lsk
     * Date:2016.04.22
     *
     * @param userId 用户ID
     * @param url 资源URL
     * @return
     */
    List<Resource> findBtnByUrl(String userId, String url);


}
